#  Boost.Variant2 Library Test Jamfile
#
#  Copyright 2015-2019 Peter Dimov
#
#  Distributed under the Boost Software License, Version 1.0.
#  See accompanying file LICENSE_1_0.txt or copy at
#  http://www.boost.org/LICENSE_1_0.txt

import testing ;
import ../../config/checks/config : requires ;

project
  : default-build

    <warnings>extra

  : requirements

    [ requires cxx11_variadic_templates cxx11_template_aliases cxx11_decltype cxx11_constexpr ]

    <toolset>msvc:<warnings-as-errors>on
    <toolset>gcc:<warnings-as-errors>on
    <toolset>clang:<warnings-as-errors>on
  ;

run quick.cpp ;

run variant_size.cpp ;
run variant_alternative.cpp ;

run variant_holds_alternative.cpp ;
compile variant_holds_alternative_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_get_by_index.cpp ;
compile variant_get_by_index_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_get_by_type.cpp ;
compile variant_get_by_type_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_default_construct.cpp ;
compile variant_default_construct_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_copy_construct.cpp ;
compile variant_copy_construct_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_move_construct.cpp ;
compile variant_move_construct_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_value_construct.cpp ;
compile variant_value_construct_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_in_place_index_construct.cpp ;
compile variant_in_place_index_construct_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_in_place_type_construct.cpp ;
compile variant_in_place_type_construct_cx.cpp : <toolset>msvc-14.0:<build>no ;

run variant_copy_assign.cpp ;
compile variant_copy_assign_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_move_assign.cpp ;
compile variant_move_assign_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_value_assign.cpp ;
compile variant_value_assign_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_emplace_index.cpp ;
compile variant_emplace_index_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_emplace_type.cpp ;
compile variant_emplace_type_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_swap.cpp ;

run variant_eq_ne.cpp ;
compile variant_eq_ne_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_lt_gt.cpp ;
compile variant_lt_gt_cx.cpp : [ requires cxx14_constexpr ] ;

run variant_destroy.cpp ;
run variant_visit.cpp ;

run variant_convert_construct.cpp ;
run variant_subset.cpp ;
run variant_valueless.cpp ;

run variant_copy_construct_throw.cpp ;
run variant_move_construct_throw.cpp ;
run variant_convert_construct_throw.cpp ;

run variant_copy_assign_throw.cpp ;
run variant_move_assign_throw.cpp ;

local NX =
    <exception-handling>off
    <toolset>msvc:<cxxflags>/wd4530
    <toolset>msvc:<cxxflags>/wd4577
    ;

run variant_get_by_index.cpp throw_exception.cpp : : : $(NX) : variant_get_by_index_nx ;
compile variant_get_by_index_cx.cpp : $(NX) <toolset>msvc-14.0:<build>no : variant_get_by_index_cx_nx ;

run variant_get_by_type.cpp throw_exception.cpp : : : $(NX) : variant_get_by_type_nx ;
compile variant_get_by_type_cx.cpp : $(NX) <toolset>msvc-14.0:<build>no : variant_get_by_type_cx_nx ;

run variant_subset.cpp throw_exception.cpp : : : $(NX) : variant_subset_nx ;

run variant_hash.cpp ;

run variant_trivial.cpp ;
run variant_special.cpp ;

run variant_visit_derived.cpp ;

run variant_many_types.cpp ;

run variant_visit_r.cpp : : :
    <toolset>gcc,<target-os>windows:<variant>release
    <toolset>gcc,<target-os>cygwin:<variant>release
    ;

compile variant_derived_construct.cpp ;

run variant_visit_by_index.cpp ;

run variant_ostream_insert.cpp ;
run is_output_streamable.cpp ;
